Completed
Push — master ( 143160...7b9dc4 )
by greg
01:48
created

post.js ➔ edit   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 3
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
1
import path from 'path'
2
3
import {
4
  cmsData,
5
  Page,
6
  cmsOperations,
7
  cmsTemplates,
8
  coreUtils,
9
  config,
10
  abeExtend,
11
  Manager
12
} from '../../'
13
14
export function draft(filePath, json, workflow = 'draft') {
15
  var p = new Promise((resolve) => {
16
    abeExtend.hooks.instance.trigger('beforeDraft', json, filePath)
17
18
    var revisionPath = path.join(config.root, config.data.url, filePath.replace(`.${config.files.templates.extension}`, '.json'))
19
    revisionPath = coreUtils.file.addDateIsoToRevisionPath(revisionPath, workflow)
20
    var date = coreUtils.file.getDate(revisionPath)
21
    cmsData.metas.add(json, workflow, date)
22
23
    var template = cmsTemplates.template.getTemplate(json.abe_meta.template, json)
24
25
    cmsData.source.getDataList(path.dirname(json.abe_meta.link), template, json)
26
    .then(() => {
27
28
      json['abe_meta'].complete = cmsData.utils.getPercentOfRequiredTagsFilled(template, json)
29
30
      // var page = new Page(json.abe_meta.template, template, json, true)
31
      var result
32
      if (!cmsOperations.save.saveJson(revisionPath, json)) {
33
        result = {
34
          success: 0,
35
          error: 'cannot json save file'
36
        }
37
      }else {
38
        Manager.instance.updatePostInList(revisionPath)
39
        result = {
40
          success: 1,
41
          json: json
42
        }
43
      }
44
      resolve(result)
45
    })
46
  })
47
48
  return p
49
}
50
51
export function publish(filePath, json) {
52
  var p = new Promise((resolve) => {
53
    abeExtend.hooks.instance.trigger('beforePublish', json, filePath)
54
55
    var revisionPath = path.join(config.root, config.data.url, filePath.replace(`.${config.files.templates.extension}`, '.json'))
56
    var postPath = path.join(config.root, config.publish.url, filePath)
57
    // revisionPath = coreUtils.file.addDateIsoToRevisionPath(revisionPath, workflow)
58
    cmsData.metas.add(json, 'publish')
59
60
    var template = cmsTemplates.template.getTemplate(json.abe_meta.template, json)
61
62
    cmsData.source.getDataList(path.dirname(json.abe_meta.link), template, json)
63
    .then(() => {
64
      json['abe_meta'].complete = cmsData.utils.getPercentOfRequiredTagsFilled(template, json)
65
66
      var page = new Page(json.abe_meta.template, template, json, true)
67
      
68
      var result
69
      if (!cmsOperations.save.saveHtml(postPath, page.html)) {
70
        result = {
71
          success: 0,
72
          error: 'cannot html save file'
73
        }
74
      }else {
75
        if (!cmsOperations.save.saveJson(revisionPath, json)) {
76
          result = {
77
            success: 0,
78
            error: 'cannot json save file'
79
          }
80
        }else {
81
          Manager.instance.updatePostInList(revisionPath)
82
          result = {
83
            success: 1,
84
            json: json
85
          }
86
        }
87
      }
88
      resolve(result)
89
    })
90
  })
91
92
  return p
93
}
94
95
export function unpublish(filePath) {
96
  abeExtend.hooks.instance.trigger('beforeUnpublish', filePath)
97
98
  var p = new Promise((resolve, reject) => {
99
    var revisionPath = path.join(config.root, config.data.url, filePath.replace(`.${config.files.templates.extension}`, '.json'))
100
    var postPath = path.join(config.root, config.publish.url, filePath)
101
    if(coreUtils.file.exist(revisionPath)) {
102
      var json = JSON.parse(JSON.stringify(cmsData.file.get(revisionPath)))
103
      if(json.abe_meta.publish != null) {
104
        delete json.abe_meta.publish
105
      }
106
107
      var p = cmsOperations.post.draft(
108
        filePath, 
109
        json,
110
        'draft'
111
      )
112
113
      p.then((result) => {
114
        cmsOperations.remove.removeFile(revisionPath, postPath)
115
        abeExtend.hooks.instance.trigger('afterUnpublish', revisionPath, postPath)
116
        var newRevisionPath = path.join(config.root, config.data.url, result.json.abe_meta.latest.abeUrl.replace(`.${config.files.templates.extension}`, '.json'))
117
        Manager.instance.updatePostInList(newRevisionPath)
118
        resolve(result)
119
      }).catch(function(e) {
120
        console.error('[ERROR] unpublish', e)
121
        reject()
122
      })
123
    }
124
  })
125
126
  return p
127
}
128
129
export function submit(filePath, json, workflow) {
130
  var p
131
  if (workflow === 'publish') {
132
    p = cmsOperations.post.publish(
133
      filePath, 
134
      json
135
    )
136
  }else {
137
    p = cmsOperations.post.draft(
138
      filePath, 
139
      json, 
140
      workflow
141
    )
142
  }
143
144
  return p
145
}
146
147
export function reject(filePath, json, workflow) {
148
  abeExtend.hooks.instance.trigger('beforeReject', filePath)
149
150
  var rejectToWorkflow
151
  var found = false
152
  Array.prototype.forEach.call(config.users.workflow, (flow) => {
153
    if (workflow === flow) {
154
      found = true
155
    }
156
    if (!found) {
157
      rejectToWorkflow = flow
158
    }
159
  })
160
  if (!found) {
161
    rejectToWorkflow = 'draft'
162
  }
163
164
  var p = new Promise((resolve) => {
165
    if(json.abe_meta.publish != null) {
166
      delete json.abe_meta.publish
167
    }
168
    var p2 = cmsOperations.post.draft(
169
        filePath, 
170
        json,
171
        rejectToWorkflow
0 ignored issues
show
Bug introduced by
The variable rejectToWorkflow does not seem to be initialized in case !found on line 160 is false. Are you sure the function draft handles undefined variables?
Loading history...
172
      )
173
    p2.then((result) => {
174
      abeExtend.hooks.instance.trigger('afterReject', result)
175
      resolve(result)
176
    }).catch(function(e) {
177
      console.error('[ERROR] reject.js', e)
178
    })
179
  })
180
181
  return p
182
}